package com.exam.system.utils;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;

import java.util.Date;

/**
 * @ClassName JwtUtils
 * @Description jwt 工具类
 * @Author ckl
 * @DATE 2021/5/24 11:30
 * @versions 1.0
 */
public class JwtUtils {

    //设置过期时间
//    private static final long EXPIRE_TIME = 50 * 60 * 1000;

    /**
     * jwt 密匙
     */
    public static final String SECRET = "exam_system";

    /**
     * 校验token是否正确 解密
     * @param token 前台传过来的token
     * @param username 用户名
     * @return 返回token是否正确
     */
    public static boolean verify(String token,String username){
        Algorithm algorithm = Algorithm.HMAC256(SECRET);
        JWTVerifier verifier = JWT.require(algorithm).withClaim("username", username).build();
        verifier.verify(token);
        return true;
    }

    /**
     * 获得token中的信息
     * @param token 登陆生成的token
     * @return 返回token中包含的用户名
     */
    public static String getUserName(String token){
        DecodedJWT jwt = JWT.decode(token);
        return jwt.getClaim("username").asString();
    }

    /**
     * 登陆生成token
     * @param username 登陆使用的账号
     * @return 返回加密的token
     */
    public static String sign(String username){
        Algorithm algorithm = Algorithm.HMAC256(SECRET);
        return JWT.create()
                // 自定义claim值
                .withClaim("username", username)
                // token的密匙
                .sign(algorithm);
    }

}
